﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using SeguridadWCF.Dominio;

namespace SeguridadWCF.Persistencia
{
    public class UsuarioDAO
    {
        String strCnx = "data source=64.49.237.194;initial catalog=BDreserva;persist security info=True;user id=psdesa;password=PSdesa2014";

        public void Inserta(Usuario pObjUsuario)
        {
            using (SqlConnection objSqlConnection = new SqlConnection(strCnx)) {
                using (SqlCommand objSqlCommand = new SqlCommand())
                {
                    objSqlConnection.Open();
                    objSqlCommand.CommandText = "INSERT INTO TB_USUARIO(USU_NOM,USU_APE_PAT,USU_LOGIN,USU_PASSWORD,USU_EMAIL_USU_TIPO,USU_ESTADO) VALUES(@NOMBRE,@APE_PAT,@LOGIN,@PASSWORD,@EMAIL,@TIPO,@ESTADO)";
                    objSqlCommand.CommandType = System.Data.CommandType.Text;
                    objSqlCommand.Connection = objSqlConnection;
                    //tipo: 1: Admin, 2:Counter, 3:Counter Emision

                    objSqlCommand.Parameters.Add(new SqlParameter("@NOMBRE", pObjUsuario.Nombre));
                    objSqlCommand.Parameters.Add(new SqlParameter("@APE_PAT", pObjUsuario.Apellidos));
                    objSqlCommand.Parameters.Add(new SqlParameter("@LOGIN", pObjUsuario.Login));
                    objSqlCommand.Parameters.Add(new SqlParameter("@PASSWORD", pObjUsuario.Clave));
                    objSqlCommand.Parameters.Add(new SqlParameter("@EMAIL", pObjUsuario.Email));
                    objSqlCommand.Parameters.Add(new SqlParameter("@TIPO", pObjUsuario.Tipo));
                    objSqlCommand.Parameters.Add(new SqlParameter("@ESTADO", pObjUsuario.Estado));

                    objSqlCommand.ExecuteNonQuery();
                }
            }
        }

        public void Modifica(Usuario pObjUsuario)
        {
            using (SqlConnection objSqlConnection = new SqlConnection(strCnx))
            {
                using (SqlCommand objSqlCommand = new SqlCommand())
                {
                    objSqlConnection.Open();
                    objSqlCommand.CommandText = "UPDATE TB_USUARIO SET USU_NOM=@NOMBRE,USU_APE_PAT=@APE_PAT,USU_LOGIN=@LOGIN,USU_PASSWORD=@PASSWORD,USU_EMAIL=@EMAIL,USU_TIPO=@TIPO,USU_ESTADO=@ESTADO WHERE USU_ID=@ID";
                    objSqlCommand.CommandType = System.Data.CommandType.Text;
                    objSqlCommand.Connection = objSqlConnection;
                    //tipo: 1: Admin, 2:Counter, 3:Counter Emision

                    objSqlCommand.Parameters.Add(new SqlParameter("@NOMBRE", pObjUsuario.Nombre));
                    objSqlCommand.Parameters.Add(new SqlParameter("@APE_PAT", pObjUsuario.Apellidos));
                    objSqlCommand.Parameters.Add(new SqlParameter("@LOGIN", pObjUsuario.Login));
                    objSqlCommand.Parameters.Add(new SqlParameter("@PASSWORD", pObjUsuario.Clave));
                    objSqlCommand.Parameters.Add(new SqlParameter("@EMAIL", pObjUsuario.Email));
                    objSqlCommand.Parameters.Add(new SqlParameter("@TIPO", pObjUsuario.Tipo));
                    objSqlCommand.Parameters.Add(new SqlParameter("@ESTADO", pObjUsuario.Estado));
                    objSqlCommand.Parameters.Add(new SqlParameter("@ID", pObjUsuario.Codigo));

                    objSqlCommand.ExecuteNonQuery();
                }
            }
        }

        public void Elimina(int pIntCodigo)
        {
            using (SqlConnection objSqlConnection = new SqlConnection(strCnx))
            {
                using (SqlCommand objSqlCommand = new SqlCommand())
                {
                    objSqlConnection.Open();
                    objSqlCommand.CommandText = "DELETE FROM TB_USUARIO WHERE USU_ID=@ID";
                    objSqlCommand.CommandType = System.Data.CommandType.Text;
                    objSqlCommand.Connection = objSqlConnection;
                    objSqlCommand.Parameters.Add(new SqlParameter("@ID", pIntCodigo));
                    objSqlCommand.ExecuteNonQuery();
                }
            }
        }

        public Usuario Obtiene(int pIntCodigo)
        {
            Usuario objUsuario = null;
            using (SqlConnection objSqlConnection = new SqlConnection(strCnx))
            {
                using (SqlCommand objSqlCommand = new SqlCommand())
                {
                    objSqlConnection.Open();
                    objSqlCommand.CommandText = "SELECT * FROM TB_USUARIO WHERE USU_ID=@ID";
                    objSqlCommand.CommandType = System.Data.CommandType.Text;
                    objSqlCommand.Connection = objSqlConnection;

                    objSqlCommand.Parameters.Add(new SqlParameter("@ID", pIntCodigo));

                    using (SqlDataReader objSqlDataReader = objSqlCommand.ExecuteReader())
                    {
                        if (objSqlDataReader.Read()) {
                            objUsuario = new Usuario();
                            objUsuario.Codigo = int.Parse(objSqlDataReader["USU_ID"].ToString());
                            objUsuario.Nombre = objSqlDataReader["USU_ID"].ToString();
                            objUsuario.Apellidos = objSqlDataReader["USU_APE_PAT"].ToString();
                            objUsuario.Email = objSqlDataReader["USU_EMAIL"].ToString();
                            objUsuario.Login = objSqlDataReader["USU_LOGIN"].ToString();
                            objUsuario.Clave = objSqlDataReader["USU_PASSWORD"].ToString();
                            objUsuario.Tipo = objSqlDataReader["USU_TIPO"].ToString();
                            objUsuario.Estado = objSqlDataReader["USU_ESTADO"].ToString();
                        }
                    }
                }
            }
            return objUsuario;
        }

        public List<Usuario> ListarTodos()
        {
            List<Usuario> lstUsuarios = new List<Usuario>();
            using (SqlConnection objSqlConnection = new SqlConnection(strCnx))
            {
                using (SqlCommand objSqlCommand = new SqlCommand())
                {
                    objSqlConnection.Open();
                    objSqlCommand.CommandText = "DELETE FROM TB_USUARIO WHERE USU_ID=@ID";
                    objSqlCommand.CommandType = System.Data.CommandType.Text;
                    objSqlCommand.Connection = objSqlConnection;
                    
                    using (SqlDataReader objSqlDataReader = objSqlCommand.ExecuteReader())
                    {
                        while (objSqlDataReader.Read())
                        {
                            Usuario objUsuario = new Usuario();
                            objUsuario.Codigo = int.Parse(objSqlDataReader["USU_ID"].ToString());
                            objUsuario.Nombre = objSqlDataReader["USU_ID"].ToString();
                            objUsuario.Apellidos = objSqlDataReader["USU_APE_PAT"].ToString();
                            objUsuario.Email = objSqlDataReader["USU_EMAIL"].ToString();
                            objUsuario.Login = objSqlDataReader["USU_LOGIN"].ToString();
                            objUsuario.Clave = objSqlDataReader["USU_PASSWORD"].ToString();
                            objUsuario.Tipo = objSqlDataReader["USU_TIPO"].ToString();
                            objUsuario.Estado = objSqlDataReader["USU_ESTADO"].ToString();
                            lstUsuarios.Add(objUsuario);
                        }
                    }
                }
            }
            return lstUsuarios;
        }

        public Usuario Obtieneporlogin(string login, string clave)
        {
            Usuario objUsuario = null;
            using (SqlConnection objSqlConnection = new SqlConnection(strCnx))
            {
                using (SqlCommand objSqlCommand = new SqlCommand())
                {
                    objSqlConnection.Open();
                    objSqlCommand.CommandText = "SELECT * FROM TB_USUARIO WHERE USU_LOGIN=@LOGIN AND USU_PASSWORD = @CLAVE";
                    objSqlCommand.CommandType = System.Data.CommandType.Text;
                    objSqlCommand.Connection = objSqlConnection;

                    objSqlCommand.Parameters.Add(new SqlParameter("@LOGIN", login));
                    objSqlCommand.Parameters.Add(new SqlParameter("@CLAVE", clave));
                    objSqlCommand.Connection = objSqlConnection;
                    using (SqlDataReader objSqlDataReader = objSqlCommand.ExecuteReader())
                    {
                        if (objSqlDataReader.Read())
                        {
                            objUsuario = new Usuario();
                            objUsuario.Codigo = int.Parse(objSqlDataReader["USU_ID"].ToString());
                            objUsuario.Nombre = objSqlDataReader["USU_ID"].ToString();
                            objUsuario.Apellidos = objSqlDataReader["USU_APE_PAT"].ToString();
                            objUsuario.Email = objSqlDataReader["USU_EMAIL"].ToString();
                            objUsuario.Login = objSqlDataReader["USU_LOGIN"].ToString();
                            objUsuario.Clave = objSqlDataReader["USU_PASSWORD"].ToString();
                            objUsuario.Tipo = objSqlDataReader["USU_TIPO"].ToString();
                            objUsuario.Estado = objSqlDataReader["USU_ESTADO"].ToString();
                        }
                    }
                }
            }
            return objUsuario;
        }

    }
}